package com.atguigu.tingshu.live.api;

import org.joda.time.LocalDateTime;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;

public class Test {

      public static void main(String[] args) {
            //    webrtc://domain/AppName/StreamName?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)
            //    txSecret=2133c689c452f0bf81b1a88261f1d9a6&txTime=579ACB15
            //    推流地址：webrtc://190649.push.tlivecloud.com/live/room1/
            String key = "3df6a2b8b90c69391c43520be027b7bb"; // 鉴权配置主key

            String streamName = "room1";
            Long txTime = new LocalDateTime(new Date()).plusDays(1).toDate().getTime()/1000;
            System.out.println(System.currentTimeMillis());
            //    webrtc://190649.push.tlivecloud.com/live/room1?txSecret=cd368c587c750ec5bc0c3c89a1cfe9a2&txTime=659F5D15
            //                                                    txSecret=eea3f3c381eda3e90b54a1bc12d42530&txTime=659F5EB8
            System.out.println("tx:"+txTime);
            String safeUrl = getSafeUrl(key, streamName, txTime);
            System.out.println(getSafeUrl(key, streamName, txTime));
            //    地址：
            String pushUrl = "webrtc://190649.push.tlivecloud.com/live/"+streamName+"?"+safeUrl;
            System.out.println(pushUrl);
            //    webrtc://mqxplay.atguigu.cn/live/room1
            String pullUrl = "webrtc://mqxplay.atguigu.cn/live/"+streamName+"?"+safeUrl;
            System.out.println(pullUrl);

      }

      private static final char[] DIGITS_LOWER =
            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

      /*
      * KEY+ streamName + txTime
      */
      private static String getSafeUrl(String key, String streamName, long txTime) {
            String input = new StringBuilder().
                              append(key).
                              append(streamName).
                              append(Long.toHexString(txTime).toUpperCase()).toString();

            String txSecret = null;
            try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  txSecret  = byteArrayToHexString(
                              messageDigest.digest(input.getBytes("UTF-8")));
            } catch (NoSuchAlgorithmException e) {
                  e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
            }

            return txSecret == null ? "" :
                              new StringBuilder().
                              append("txSecret=").
                              append(txSecret).
                              append("&").
                              append("txTime=").
                              append(Long.toHexString(txTime).toUpperCase()).
                              toString();
      }

      private static String byteArrayToHexString(byte[] data) {
            char[] out = new char[data.length << 1];

            for (int i = 0, j = 0; i < data.length; i++) {
                  out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
                  out[j++] = DIGITS_LOWER[0x0F & data[i]];
            }
            return new String(out);
      }
}